package com.wentao.thisService.service;

import com.wentao.thisFacade.domain.PageBase;
import com.wentao.thisFacade.domain.reqeust.CreateOrderInfoListRequest;
import com.wentao.thisFacade.domain.reqeust.OrderDeliverRequest;
import com.wentao.thisFacade.domain.reqeust.OrderPayRequest;
import com.wentao.thisFacade.domain.result.OrderInfoPageResult;
import com.wentao.thisFacade.domain.result.OrderInfoResult;

import java.util.List;

/**
 * @Auther: ZhaiYanTao
 * @Date: 2020/3/27 10:17
 * @Description: 订单service
 */
public interface OrderService {

    /**
     * 提交订单
     *
     * @param entity 订单封装
     * @return 订单信息
     * @throws Exception 异常信息
     */
    OrderInfoResult createOrderInfo(CreateOrderInfoListRequest createOrderInfoListRequest, Long userId) throws Exception;

    /**
     * 订单列表
     *
     * @param entity 根据userId查询该用户酒店的订单列表
     * @return 订单列表
     * @throws Exception 异常信息
     */
    List<OrderInfoResult> listOrderByUserId(Long userId) throws Exception;

    /**
     * 订单分页
     *
     * @param entity 根据userId查询该用户酒店的订单列表
     * @return 订单列表
     * @throws Exception 异常信息
     */
    OrderInfoPageResult pageOrder(PageBase pageBase) throws Exception;

    /**
     * 根据订单id查询订单详情
     *
     * @param entity 订单id封装
     * @return 订单详情
     * @throws Exception 异常信息
     */
    OrderInfoResult orderInfo(Long orderId) throws Exception;

    /**
     * 订单确认发货（填写快递单号和快递公司）
     *
     * @param entity 订单id+快递单号+快递公司
     * @return 订单详情
     */
    OrderInfoResult orderDeliver(OrderDeliverRequest orderDeliverRequest) throws Exception;

    /**
     * 订单确认收货
     *
     * @param entity 订单id
     * @return 订单详情
     * @throws Exception 异常信息
     */
    OrderInfoResult orderConfirmReceived(Long orderId) throws Exception;

    /**
     * 订单和支付状态改变接口（主用于测试）
     *
     * @param entity 订单id，订单状态，支付状态
     * @return 订单详情
     * @throws Exception 异常信息
     */
    OrderInfoResult changeOrderPayStatus(OrderPayRequest orderPayRequest) throws Exception;
}
